home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / machserver / 1.098 / sched / schedule.s < prev   
Text File  |  1988-07-01  |  14KB  |  920 lines

  1. LL0:
  2.     .data
  3.     .even
  4. _rcsid:
  5.     .word    9288
  6.     .word    25953
  7.     .word    25701
  8.     .word    29242
  9.     .word    8307
  10.     .word    25448
  11.     .word    25956
  12.     .word    30060
  13.     .word    25902
  14.     .word    25388
  15.     .word    30240
  16.     .word    13614
  17.     .word    13856
  18.     .word    14392
  19.     .word    12080
  20.     .word    13871
  21.     .word    12854
  22.     .word    8240
  23.     .word    14650
  24.     .word    13622
  25.     .word    14900
  26.     .word    12832
  27.     .word    28533
  28.     .word    29556
  29.     .word    25970
  30.     .word    8261
  31.     .word    30832
  32.     .word    8228
  33.     .word    8275
  34.     .word    20562
  35.     .word    18772
  36.     .word    17696
  37.     .word    10306
  38.     .word    25970
  39.     .word    27493
  40.     .word    27749
  41.     .word    31017
  42.     .word    0
  43.     .even
  44.     .globl    _sched_Mutex
  45. _sched_Mutex:
  46.     .long    0
  47.     .lcomm    _gatherInterval,4
  48.     .lcomm    _gatherTicks,8
  49.     .lcomm    _noRecentUsageCharge,4
  50.     .lcomm    _quantumInterval,4
  51.     .lcomm    _quantumTicks,4
  52.     .even
  53. _init:
  54.     .long    0
  55.     .even
  56.     .globl    _sched_DoContextSwitch
  57. _sched_DoContextSwitch:
  58.     .long    0
  59.     .lcomm    _forgetUsageElement,32
  60.     .comm    _sched_Instrument,0x34
  61.     .text
  62. |#PROC# 0
  63.     .globl    _Sched_Init
  64. _Sched_Init:
  65.     link    a6,#0
  66.     addl    #-LF297,sp
  67.     moveml    #LS297,sp@
  68.     movl    _timer_IntOneMillisecond,d0
  69.     lsll    #2,d0
  70.     movl    d0,d1
  71.     lsll    #3,d1
  72.     addl    d1,d0
  73.     addl    d1,d1
  74.     addl    d1,d0
  75.     movl    d0,_quantumInterval
  76.     movl    _timer_IntOneMillisecond,d0
  77.     lsll    #2,d0
  78.     movl    d0,d1
  79.     lsll    #2,d1
  80.     addl    d1,d0
  81.     movl    d0,_gatherInterval
  82.     pea    _gatherTicks
  83.     movl    _gatherInterval,sp@-
  84.     movl    _gatherTicks+0x4,sp@-
  85.     movl    _gatherTicks,sp@-
  86.     jbsr    _Timer_AddIntervalToTicks
  87.     lea    sp@(0x10),sp
  88.     movl    _gatherInterval,d0
  89.     lsrl    #0x1,d0
  90.     movl    d0,d1
  91.     addl    d1,d1
  92.     addl    d1,d0
  93.     lsrl    #0x3,d0
  94.     movl    d0,_noRecentUsageCharge
  95.     movl    _quantumInterval,d0
  96.     movl    _gatherInterval,d1
  97.     jsr    uldivt
  98.     movl    d0,_quantumTicks
  99.     pea    _sched_Instrument
  100.     pea    0x34
  101.     jbsr    _Byte_Zero
  102.     addqw    #0x8,sp
  103.     movl    _schedReadyQueueHdrPtr,sp@-
  104.     jbsr    _List_Init
  105.     addqw    #0x4,sp
  106.     movl    #_Sched_ForgetUsage,_forgetUsageElement+0x8
  107.     clrl    _forgetUsageElement+0x14
  108.     movl    _timer_IntOneSecond,_forgetUsageElement+0x1c
  109.     pea    0x1
  110.     pea    _forgetUsageElement
  111.     jbsr    _Timer_ScheduleRoutine
  112.     addqw    #0x8,sp
  113.     movl    #0x1,_init
  114. LE297:
  115.     unlk    a6
  116.     rts
  117.     LF297 = 0
  118.     LS297 = 0x0
  119.     LFF297 = 0
  120.     LSS297 = 0x0
  121.     LP297 =    0x18
  122.     .data
  123.     .text
  124. |#PROC# 0
  125.     .globl    _Sched_ForgetUsage
  126. _Sched_ForgetUsage:
  127.     link    a6,#0
  128.     addl    #-LF299,sp
  129.     moveml    #LS299,sp@
  130.     addql    #0x1,_sync_Instrument+0xc
  131.     tstl    _mach_AtInterruptLevel
  132.     jne    L301
  133. |#ASMOUT#
  134. movw #0x2700,sr
  135. |#ENDASM#
  136.     movl    _mach_NumDisableIntrsPtr,a0
  137.     addql    #0x1,a0@
  138. L301:
  139.     movl    _sched_Mutex,d0
  140.     addql    #0x1,_sched_Mutex
  141.     cmpl    #0x1,d0
  142.     jne    L302
  143.     .data1
  144. L303:
  145.     .ascii    "Deadlock!!! (sched_Mutex @ 0x%x)\12\0"
  146.     .text
  147.     pea    _sched_Mutex
  148.     pea    L303
  149.     pea    0x1
  150.     jbsr    _Sys_Panic
  151.     lea    sp@(0xc),sp
  152. L302:
  153.     moveq    #0,d7
  154. L306:
  155.     cmpl    _proc_MaxNumProcesses,d7
  156.     jge    L305
  157.     movl    d7,d0
  158.     asll    #0x2,d0
  159.     movl    _proc_PCBTable,a0
  160.     movl    a0@(0,d0:l),a5
  161.     tstl    a5@(0xc)
  162.     jne    L307
  163.     jra    L304
  164. L307:
  165.     movl    a5@(0x80),d0
  166.     movl    d0,d1
  167.     lsll    #2,d1
  168.     addl    d1,d0
  169.     lsrl    #0x3,d0
  170.     movl    d0,a5@(0x80)
  171.     movl    a5@(0x7c),d0
  172.     movl    d0,d1
  173.     lsll    #2,d1
  174.     addl    d1,d0
  175.     lsrl    #0x3,d0
  176.     movl    d0,a5@(0x7c)
  177. L304:
  178.     addql    #0x1,d7
  179.     jra    L306
  180. L305:
  181.     pea    0x1
  182.     pea    _forgetUsageElement
  183.     jbsr    _Timer_RescheduleRoutine
  184.     addqw    #0x8,sp
  185.     addql    #0x1,_sync_Instrument+0x10
  186.     clrl    _sched_Mutex
  187.     tstl    _mach_AtInterruptLevel
  188.     jne    L308
  189.     movl    _mach_NumDisableIntrsPtr,a0
  190.     movl    a0@,d0
  191.     subql    #0x1,d0
  192.     movl    d0,a0@
  193.     jne    L309
  194. |#ASMOUT#
  195. movw #0x2000,sr
  196. |#ENDASM#
  197. L309:
  198. L308:
  199. LE299:
  200.     moveml    a6@(-0x8),#0x2080
  201.     unlk    a6
  202.     rts
  203.     LF299 = 8
  204.     LS299 = 0x2080
  205.     LFF299 = 0
  206.     LSS299 = 0x0
  207.     LP299 =    0x14
  208.     .data
  209.     .text
  210. |#PROC# 0
  211.     .globl    _Sched_GatherProcessInfo
  212. _Sched_GatherProcessInfo:
  213.     link    a6,#0
  214.     addl    #-LF310,sp
  215.     moveml    #LS310,sp@
  216.     tstl    _init
  217.     jne    L312
  218.     jra    LE310
  219. L312:
  220.     addql    #0x1,_sync_Instrument+0xc
  221.     tstl    _mach_AtInterruptLevel
  222.     jne    L313
  223. |#ASMOUT#
  224. movw #0x2700,sr
  225. |#ENDASM#
  226.     movl    _mach_NumDisableIntrsPtr,a0
  227.     addql    #0x1,a0@
  228. L313:
  229.     movl    _sched_Mutex,d0
  230.     addql    #0x1,_sched_Mutex
  231.     cmpl    #0x1,d0
  232.     jne    L314
  233.     .data1
  234. L315:
  235.     .ascii    "Deadlock!!! (sched_Mutex @ 0x%x)\12\0"
  236.     .text
  237.     pea    _sched_Mutex
  238.     pea    L315
  239.     pea    0x1
  240.     jbsr    _Sys_Panic
  241.     lea    sp@(0xc),sp
  242. L314:
  243.     moveq    #0,d7
  244. L318:
  245.     cmpl    _mach_NumProcessors,d7
  246.     jge    L317
  247.     movl    d7,d0
  248.     asll    #0x2,d0
  249.     movl    _proc_RunningProcesses,a0
  250.     movl    a0@(0,d0:l),a5
  251.     cmpl    #-0x1,a5
  252.     jne    L319
  253.     pea    _sched_Instrument+0xc
  254.     movl    _gatherTicks+0x4,sp@-
  255.     movl    _gatherTicks,sp@-
  256.     movl    _sched_Instrument+0x10,sp@-
  257.     movl    _sched_Instrument+0xc,sp@-
  258.     jbsr    _Time_Add
  259.     lea    sp@(0x14),sp
  260.     jra    L316
  261. L319:
  262.     movl    d7,sp@-
  263.     jbsr    _Mach_ProcessorState
  264.     addqw    #0x4,sp
  265.     cmpl    #0x1,d0
  266.     jne    L320
  267.     pea    a5@(0x84)
  268.     movl    _gatherTicks+0x4,sp@-
  269.     movl    _gatherTicks,sp@-
  270.     movl    a5@(0x88),sp@-
  271.     movl    a5@(0x84),sp@-
  272.     jbsr    _Time_Add
  273.     lea    sp@(0x14),sp
  274.     jra    L321
  275. L320:
  276.     pea    a5@(0x8c)
  277.     movl    _gatherTicks+0x4,sp@-
  278.     movl    _gatherTicks,sp@-
  279.     movl    a5@(0x90),sp@-
  280.     movl    a5@(0x8c),sp@-
  281.     jbsr    _Time_Add
  282.     lea    sp@(0x14),sp
  283. L321:
  284.     movl    _gatherInterval,d0
  285.     addl    d0,a5@(0x78)
  286.     movl    a5@(0x10),d0
  287.     andl    #0x2,d0
  288.     jeq    L322
  289.     cmpl    #0x2,a5@(0x74)
  290.     jeq    L322
  291.     tstl    a5@(0xac)
  292.     jeq    L323
  293.     subql    #0x1,a5@(0xac)
  294. L323:
  295.     tstl    a5@(0xac)
  296.     jne    L324
  297.     pea    a5@
  298.     jbsr    _QuantumEnd
  299.     addqw    #0x4,sp
  300. L324:
  301. L322:
  302. L316:
  303.     addql    #0x1,d7
  304.     jra    L318
  305. L317:
  306.     addql    #0x1,_sync_Instrument+0x10
  307.     clrl    _sched_Mutex
  308.     tstl    _mach_AtInterruptLevel
  309.     jne    L325
  310.     movl    _mach_NumDisableIntrsPtr,a0
  311.     movl    a0@,d0
  312.     subql    #0x1,d0
  313.     movl    d0,a0@
  314.     jne    L326
  315. |#ASMOUT#
  316. movw #0x2000,sr
  317. |#ENDASM#
  318. L326:
  319. L325:
  320. LE310:
  321.     moveml    a6@(-0x8),#0x2080
  322.     unlk    a6
  323.     rts
  324.     LF310 = 8
  325.     LS310 = 0x2080
  326.     LFF310 = 0
  327.     LSS310 = 0x0
  328.     LP310 =    0x1c
  329.     .data
  330.     .text
  331. |#PROC# 0
  332.     .globl    _Sched_ContextSwitchInt
  333. _Sched_ContextSwitchInt:
  334.     link    a6,#0
  335.     addl    #-LF327,sp
  336.     moveml    #LS327,sp@
  337.     addql    #0x1,_sched_Instrument
  338.     movl    _proc_RunningProcesses,a0
  339.     movl    a0@,a5
  340.     andl    #-0x2,a5@(0x18)
  341.     pea    a5@
  342.     jbsr    _RememberUsage
  343.     addqw    #0x4,sp
  344.     cmpl    #0x2,a6@(0x8)
  345.     jne    L329
  346.     addql    #0x1,a5@(0xa4)
  347.     movl    _schedReadyQueueHdrPtr,a0
  348.     movl    _schedReadyQueueHdrPtr,d0
  349.     cmpl    a0@(0x4),d0
  350.     jne    L330
  351.     movl    _quantumTicks,a5@(0xac)
  352.     jra    LE327
  353. L330:
  354.     pea    0x1
  355.     pea    a5@
  356.     jbsr    _Sched_InsertInQueue
  357.     addqw    #0x8,sp
  358.     movl    d0,a4
  359.     cmpl    a5,a4
  360.     jne    L331
  361.     movl    _quantumTicks,a5@(0xac)
  362.     jra    LE327
  363. L331:
  364.     movl    #0x2,a5@(0xc)
  365.     jra    L332
  366. L329:
  367.     cmpl    #0x3,a6@(0x8)
  368.     jne    L333
  369.     addql    #0x1,a5@(0xa8)
  370. L333:
  371.     movl    a6@(0x8),a5@(0xc)
  372.     jbsr    _IdleLoop
  373.     movl    d0,a4
  374. L332:
  375.     movl    #0x1,a4@(0xc)
  376.     movl    _proc_RunningProcesses,a0
  377.     movl    a4,a0@
  378.     movl    _quantumTicks,a4@(0xac)
  379.     cmpl    a5,a4
  380.     jne    L334
  381.     jra    LE327
  382. L334:
  383.     addql    #0x1,_sched_Instrument+0x8
  384.     pea    a4@
  385.     pea    a5@
  386.     jbsr    _Mach_ContextSwitch
  387.     addqw    #0x8,sp
  388. LE327:
  389.     moveml    a6@(-0x8),#0x3000
  390.     unlk    a6
  391.     rts
  392.     LF327 = 8
  393.     LS327 = 0x3000
  394.     LFF327 = 0
  395.     LSS327 = 0x0
  396.     LP327 =    0x10
  397.     .data
  398.     .text
  399. |#PROC# 0
  400. _RememberUsage:
  401.     link    a6,#0
  402.     addl    #-LF335,sp
  403.     moveml    #LS335,sp@
  404.     movl    a6@(8),a5
  405.     movl    a5@(0x74),d6
  406.     movl    a5@(0x78),d0
  407.     movl    d0,d1
  408.     addl    d1,d1
  409.     addl    d1,d0
  410.     lsrl    #0x3,d0
  411.     movl    d0,d7
  412.     tstl    d7
  413.     jne    L337
  414.     movl    _noRecentUsageCharge,d7
  415. L337:
  416.     addl    d7,a5@(0x80)
  417.     tstl    d6
  418.     jlt    L338
  419.     cmpl    #0x2,d6
  420.     jeq    L339
  421.     movl    d7,d0
  422.     lsrl    d6,d0
  423.     addl    d0,a5@(0x7c)
  424. L339:
  425.     jra    L340
  426. L338:
  427.     movl    d6,d0
  428.     negl    d0
  429.     movl    d7,d1
  430.     lsll    d0,d1
  431.     addl    d1,a5@(0x7c)
  432. L340:
  433.     clrl    a5@(0x78)
  434. LE335:
  435.     moveml    a6@(-0xc),#0x20c0
  436.     unlk    a6
  437.     rts
  438.     LF335 = 12
  439.     LS335 = 0x20c0
  440.     LFF335 = 0
  441.     LSS335 = 0x0
  442.     LP335 =    0x8
  443.     .data
  444.     .text
  445. |#PROC# 030
  446. _IdleLoop:
  447.     link    a6,#0
  448.     addl    #-LF341,sp
  449.     moveml    #LS341,sp@
  450.     movl    _schedReadyQueueHdrPtr,a4
  451. L343:
  452.     cmpl    a4@(0x4),a4
  453.     jne    L344
  454.     movl    _proc_RunningProcesses,a0
  455.     movl    #-0x1,a0@
  456.     cmpl    #-0x1,_sched_Instrument+0x1c
  457.     jne    L345
  458.     clrl    _sched_Instrument+0x1c
  459.     addql    #0x1,_sched_Instrument+0x20
  460.     jra    L346
  461. L345:
  462.     addql    #0x1,_sched_Instrument+0x1c
  463. L346:
  464.     addql    #0x1,_sync_Instrument+0x10
  465.     clrl    _sched_Mutex
  466.     tstl    _mach_AtInterruptLevel
  467.     jne    L347
  468.     movl    _mach_NumDisableIntrsPtr,a0
  469.     movl    a0@,d0
  470.     subql    #0x1,d0
  471.     movl    d0,a0@
  472.     jne    L348
  473. |#ASMOUT#
  474. movw #0x2000,sr
  475. |#ENDASM#
  476. L348:
  477. L347:
  478.     addql    #0x1,_sync_Instrument+0xc
  479.     tstl    _mach_AtInterruptLevel
  480.     jne    L349
  481. |#ASMOUT#
  482. movw #0x2700,sr
  483. |#ENDASM#
  484.     movl    _mach_NumDisableIntrsPtr,a0
  485.     addql    #0x1,a0@
  486. L349:
  487.     movl    _sched_Mutex,d0
  488.     addql    #0x1,_sched_Mutex
  489.     cmpl    #0x1,d0
  490.     jne    L350
  491.     .data1
  492. L351:
  493.     .ascii    "Deadlock!!! (sched_Mutex @ 0x%x)\12\0"
  494.     .text
  495.     pea    _sched_Mutex
  496.     pea    L351
  497.     pea    0x1
  498.     jbsr    _Sys_Panic
  499.     lea    sp@(0xc),sp
  500. L350:
  501.     jra    L343
  502. L344:
  503.     movl    a4@(0x4),a5
  504.     cmpl    #0x2,a5@(0xc)
  505.     jeq    L352
  506.     .data1
  507. L353:
  508.     .ascii    "Non-ready process found in ready queue.\12\0"
  509.     .text
  510.     pea    L353
  511.     pea    0x1
  512.     jbsr    _Sys_Panic
  513.     addqw    #0x8,sp
  514. L352:
  515.     movl    a5@,a0
  516.     movl    a5@(0x4),a0@(0x4)
  517.     movl    a5@(0x4),a0
  518.     movl    a5@,a0@
  519.     subql    #0x1,_sched_Instrument+0x28
  520.     movl    a5,d0
  521.     jra    LE341
  522. LE341:
  523.     moveml    a6@(-0x8),#0x3000
  524.     unlk    a6
  525.     rts
  526.     LF341 = 8
  527.     LS341 = 0x3000
  528.     LFF341 = 0
  529.     LSS341 = 0x0
  530.     LP341 =    0x14
  531.     .data
  532.     .text
  533. |#PROC# 0
  534.     .globl    _Sched_TimeTicks
  535. _Sched_TimeTicks:
  536.     link    a6,#0
  537.     addl    #-LF354,sp
  538.     moveml    #LS354,sp@
  539.     pea    a6@(-0x8)
  540.     pea    0x5
  541.     movl    _time_OneSecond+0x4,sp@-
  542.     movl    _time_OneSecond,sp@-
  543.     jbsr    _Time_Multiply
  544.     lea    sp@(0x10),sp
  545.     .data1
  546. L356:
  547.     .ascii    "Idling for 5 seconds...\0"
  548.     .text
  549.     pea    L356
  550.     jbsr    _Sys_Printf
  551.     addqw    #0x4,sp
  552.     movl    _sched_Instrument+0x1c,d7
  553.     movl    a6@(-0x4),sp@-
  554.     movl    a6@(-0x8),sp@-
  555.     jbsr    _Sync_WaitTime
  556.     addqw    #0x8,sp
  557.     movl    _sched_Instrument+0x1c,d0
  558.     subl    d7,d0
  559.     movl    d0,d7
  560.     .data1
  561. L357:
  562.     .ascii    " %d ticks\12\0"
  563.     .text
  564.     movl    d7,sp@-
  565.     pea    L357
  566.     jbsr    _Sys_Printf
  567.     addqw    #0x8,sp
  568.     movl    d7,d0
  569.     jsr    Ffltd
  570.     lea    L2000000,a0
  571.     jsr    Fdivd
  572.     jsr    Fintd
  573.     movl    d0,_sched_Instrument+0x24
  574. LE354:
  575.     moveml    a6@(-0xc),#0x80
  576.     unlk    a6
  577.     rts
  578.     LF354 = 12
  579.     LS354 = 0x80
  580.     LFF354 = 8
  581.     LSS354 = 0x0
  582.     LP354 =    0x18
  583. L2000000:    .long    0x40140000,0x0
  584.     .data
  585.     .text
  586. |#PROC# 0
  587. _QuantumEnd:
  588.     link    a6,#0
  589.     addl    #-LF358,sp
  590.     moveml    #LS358,sp@
  591.     movl    a6@(8),a5
  592.     orl    #0x1,a5@(0x18)
  593.     movl    #0x1,a5@(0x274)
  594.     tstl    _mach_KernelMode
  595.     jne    L360
  596.     movl    #0x1,_sched_DoContextSwitch
  597. L360:
  598. LE358:
  599.     moveml    a6@(-0x4),#0x2000
  600.     unlk    a6
  601.     rts
  602.     LF358 = 4
  603.     LS358 = 0x2000
  604.     LFF358 = 0
  605.     LSS358 = 0x0
  606.     LP358 =    0x8
  607.     .data
  608.     .text
  609. |#PROC# 0
  610.     .globl    _Sched_PrintStat
  611. _Sched_PrintStat:
  612.     link    a6,#0
  613.     addl    #-LF361,sp
  614.     moveml    #LS361,sp@
  615.     .data1
  616. L363:
  617.     .ascii    "Sched Statistics\12\0"
  618.     .text
  619.     pea    L363
  620.     jbsr    _Sys_Printf
  621.     addqw    #0x4,sp
  622.     .data1
  623. L364:
  624.     .ascii    "numContextSwitches = %d\12\0"
  625.     .text
  626.     movl    _sched_Instrument,sp@-
  627.     pea    L364
  628.     jbsr    _Sys_Printf
  629.     addqw    #0x8,sp
  630.     .data1
  631. L365:
  632.     .ascii    "numFullSwitches    = %d\12\0"
  633.     .text
  634.     movl    _sched_Instrument+0x8,sp@-
  635.     pea    L365
  636.     jbsr    _Sys_Printf
  637.     addqw    #0x8,sp
  638.     .data1
  639. L366:
  640.     .ascii    "numInvoluntary     = %d\12\0"
  641.     .text
  642.     movl    _sched_Instrument+0x4,sp@-
  643.     pea    L366
  644.     jbsr    _Sys_Printf
  645.     addqw    #0x8,sp
  646.     pea    a6@(-0x8)
  647.     movl    _sched_Instrument+0x10,sp@-
  648.     movl    _sched_Instrument+0xc,sp@-
  649.     jbsr    _Timer_TicksToTime
  650.     lea    sp@(0xc),sp
  651.     .data1
  652. L367:
  653.     .ascii    "Idle Time          = %d.%06d seconds\12\0"
  654.     .text
  655.     movl    a6@(-0x4),sp@-
  656.     movl    a6@(-0x8),sp@-
  657.     pea    L367
  658.     jbsr    _Sys_Printf
  659.     lea    sp@(0xc),sp
  660. LE361:
  661.     unlk    a6
  662.     rts
  663.     LF361 = 8
  664.     LS361 = 0x0
  665.     LFF361 = 8
  666.     LSS361 = 0x0
  667.     LP361 =    0x14
  668.     .data
  669.     .text
  670. |#PROC# 0
  671.     .globl    _Sched_LockAndSwitch
  672. _Sched_LockAndSwitch:
  673.     link    a6,#0
  674.     addl    #-LF368,sp
  675.     moveml    #LS368,sp@
  676.     addql    #0x1,_sync_Instrument+0xc
  677.     tstl    _mach_AtInterruptLevel
  678.     jne    L370
  679. |#ASMOUT#
  680. movw #0x2700,sr
  681. |#ENDASM#
  682.     movl    _mach_NumDisableIntrsPtr,a0
  683.     addql    #0x1,a0@
  684. L370:
  685.     movl    _sched_Mutex,d0
  686.     addql    #0x1,_sched_Mutex
  687.     cmpl    #0x1,d0
  688.     jne    L371
  689.     .data1
  690. L372:
  691.     .ascii    "Deadlock!!! (sched_Mutex @ 0x%x)\12\0"
  692.     .text
  693.     pea    _sched_Mutex
  694.     pea    L372
  695.     pea    0x1
  696.     jbsr    _Sys_Panic
  697.     lea    sp@(0xc),sp
  698. L371:
  699.     addql    #0x1,_sched_Instrument+0x4
  700.     pea    0x2
  701.     jbsr    _Sched_ContextSwitchInt
  702.     addqw    #0x4,sp
  703.     addql    #0x1,_sync_Instrument+0x10
  704.     clrl    _sched_Mutex
  705.     tstl    _mach_AtInterruptLevel
  706.     jne    L373
  707.     movl    _mach_NumDisableIntrsPtr,a0
  708.     movl    a0@,d0
  709.     subql    #0x1,d0
  710.     movl    d0,a0@
  711.     jne    L374
  712. |#ASMOUT#
  713. movw #0x2000,sr
  714. |#ENDASM#
  715. L374:
  716. L373:
  717. LE368:
  718.     unlk    a6
  719.     rts
  720.     LF368 = 0
  721.     LS368 = 0x0
  722.     LFF368 = 0
  723.     LSS368 = 0x0
  724.     LP368 =    0x14
  725.     .data
  726.     .text
  727. |#PROC# 0
  728.     .globl    _Sched_ContextSwitch
  729. _Sched_ContextSwitch:
  730.     link    a6,#0
  731.     addl    #-LF375,sp
  732.     moveml    #LS375,sp@
  733.     addql    #0x1,_sync_Instrument+0xc
  734.     tstl    _mach_AtInterruptLevel
  735.     jne    L377
  736. |#ASMOUT#
  737. movw #0x2700,sr
  738. |#ENDASM#
  739.     movl    _mach_NumDisableIntrsPtr,a0
  740.     addql    #0x1,a0@
  741. L377:
  742.     movl    _sched_Mutex,d0
  743.     addql    #0x1,_sched_Mutex
  744.     cmpl    #0x1,d0
  745.     jne    L378
  746.     .data1
  747. L379:
  748.     .ascii    "Deadlock!!! (sched_Mutex @ 0x%x)\12\0"
  749.     .text
  750.     pea    _sched_Mutex
  751.     pea    L379
  752.     pea    0x1
  753.     jbsr    _Sys_Panic
  754.     lea    sp@(0xc),sp
  755. L378:
  756.     movl    a6@(0x8),sp@-
  757.     jbsr    _Sched_ContextSwitchInt
  758.     addqw    #0x4,sp
  759.     addql    #0x1,_sync_Instrument+0x10
  760.     clrl    _sched_Mutex
  761.     tstl    _mach_AtInterruptLevel
  762.     jne    L380
  763.     movl    _mach_NumDisableIntrsPtr,a0
  764.     movl    a0@,d0
  765.     subql    #0x1,d0
  766.     movl    d0,a0@
  767.     jne    L381
  768. |#ASMOUT#
  769. movw #0x2000,sr
  770. |#ENDASM#
  771. L381:
  772. L380:
  773. LE375:
  774.     unlk    a6
  775.     rts
  776.     LF375 = 0
  777.     LS375 = 0x0
  778.     LFF375 = 0
  779.     LSS375 = 0x0
  780.     LP375 =    0x14
  781.     .data
  782.     .text
  783. |#PROC# 0
  784.     .globl    _Sched_StartKernProc
  785. _Sched_StartKernProc:
  786.     link    a6,#0
  787.     addl    #-LF382,sp
  788.     moveml    #LS382,sp@
  789.     addql    #0x1,_sync_Instrument+0x10
  790.     clrl    _sched_Mutex
  791.     tstl    _mach_AtInterruptLevel
  792.     jne    L384
  793.     movl    _mach_NumDisableIntrsPtr,a0
  794.     movl    a0@,d0
  795.     subql    #0x1,d0
  796.     movl    d0,a0@
  797.     jne    L385
  798. |#ASMOUT#
  799. movw #0x2000,sr
  800. |#ENDASM#
  801. L385:
  802. L384:
  803.     movl    a6@(0x8),a0
  804.     jsr    a0@
  805.     pea    0
  806.     jbsr    _Proc_Exit
  807.     addqw    #0x4,sp
  808. LE382:
  809.     unlk    a6
  810.     rts
  811.     LF382 = 0
  812.     LS382 = 0x0
  813.     LFF382 = 0
  814.     LSS382 = 0x0
  815.     LP382 =    0xc
  816.     .data
  817.     .text
  818. |#PROC# 0
  819.     .globl    _Sched_MakeReady
  820. _Sched_MakeReady:
  821.     link    a6,#0
  822.     addl    #-LF386,sp
  823.     moveml    #LS386,sp@
  824.     movl    a6@(8),a5
  825.     addql    #0x1,_sync_Instrument+0xc
  826.     tstl    _mach_AtInterruptLevel
  827.     jne    L388
  828. |#ASMOUT#
  829. movw #0x2700,sr
  830. |#ENDASM#
  831.     movl    _mach_NumDisableIntrsPtr,a0
  832.     addql    #0x1,a0@
  833. L388:
  834.     movl    _sched_Mutex,d0
  835.     addql    #0x1,_sched_Mutex
  836.     cmpl    #0x1,d0
  837.     jne    L389
  838.     .data1
  839. L390:
  840.     .ascii    "Deadlock!!! (sched_Mutex @ 0x%x)\12\0"
  841.     .text
  842.     pea    _sched_Mutex
  843.     pea    L390
  844.     pea    0x1
  845.     jbsr    _Sys_Panic
  846.     lea    sp@(0xc),sp
  847. L389:
  848.     movl    #0x2,a5@(0xc)
  849.     pea    a5@
  850.     jbsr    _Sched_MoveInQueue
  851.     addqw    #0x4,sp
  852.     addql    #0x1,_sync_Instrument+0x10
  853.     clrl    _sched_Mutex
  854.     tstl    _mach_AtInterruptLevel
  855.     jne    L391
  856.     movl    _mach_NumDisableIntrsPtr,a0
  857.     movl    a0@,d0
  858.     subql    #0x1,d0
  859.     movl    d0,a0@
  860.     jne    L392
  861. |#ASMOUT#
  862. movw #0x2000,sr
  863. |#ENDASM#
  864. L392:
  865. L391:
  866. LE386:
  867.     moveml    a6@(-0x4),#0x2000
  868.     unlk    a6
  869.     rts
  870.     LF386 = 4
  871.     LS386 = 0x2000
  872.     LFF386 = 0
  873.     LSS386 = 0x0
  874.     LP386 =    0x14
  875.     .data
  876.     .text
  877. |#PROC# 0
  878.     .globl    _Sched_StartUserProc
  879. _Sched_StartUserProc:
  880.     link    a6,#0
  881.     addl    #-LF393,sp
  882.     moveml    #LS393,sp@
  883.     addql    #0x1,_sync_Instrument+0x10
  884.     clrl    _sched_Mutex
  885.     tstl    _mach_AtInterruptLevel
  886.     jne    L395
  887.     movl    _mach_NumDisableIntrsPtr,a0
  888.     movl    a0@,d0
  889.     subql    #0x1,d0
  890.     movl    d0,a0@
  891.     jne    L396
  892. |#ASMOUT#
  893. movw #0x2000,sr
  894. |#ENDASM#
  895. L396:
  896. L395:
  897.     movl    _proc_RunningProcesses,a0
  898.     movl    a0@,a5
  899.     pea    a5@
  900.     jbsr    _Proc_Lock
  901.     addqw    #0x4,sp
  902.     orl    #0x80,a5@(0x10)
  903.     pea    a5@
  904.     jbsr    _Proc_Unlock
  905.     addqw    #0x4,sp
  906.     movl    a6@(0x8),sp@-
  907.     pea    a5@
  908.     jbsr    _Mach_StartUserProc
  909.     addqw    #0x8,sp
  910. LE393:
  911.     moveml    a6@(-0x4),#0x2000
  912.     unlk    a6
  913.     rts
  914.     LF393 = 4
  915.     LS393 = 0x2000
  916.     LFF393 = 0
  917.     LSS393 = 0x0
  918.     LP393 =    0x10
  919.     .data
  920.